#ifndef LECTEURCARACTERE_H_
#define LECTEURCARACTERE_H_

#include <fstream>
using namespace std;

/*! \file LecteurCaractere.h
    \brief La spécification de la classe LecteurCaractere
    
    Décrit la liste des méthodes et attributs associés à la classe LecteurCaractere
    \author lazzamar
    \date 16/12/2012
 */
/*! \class LecteurCaractere
    \brief La classe représentant le lecteur de caractère.
    
    Cette classe permet de lire des caractères dans un fichier donné. Les
    méthodes suivantes sont associées à la lecture et à la prise des numéros de
    ligne et colonne :
    \li getCarCour
    \li getLigne
    \li getColonne
	\li suivant()
 */

class LecteurCaractere {

  ////////////////////////////////////////////////////////////////////////////////
  public :
	/*! \fn LecteurCaractere(string nomFich);
		\brief Constructeur de la classe LecteurCaractere

	 Ce constructeur ouvre le fichier passé en paramètre, et lève une exception
	 si c'est impossible.
		\param nomFich - le fichier à ouvrir
	*/
    LecteurCaractere(string nomFich); // construit le lecteur pour parcourir nomFich
	
	/*! \fn inline char         getCarCour() { return carCour; }
		\brief Accesseur du caractère courant.

	 Il renvoie le carcatère contenu dans carCour.
		\return Caractère courant.
	*/
    inline char         getCarCour() { return carCour; } // accesseur
	
	/*! \fn inline unsigned int getLigne()   { return ligne;   }
		\brief Accesseur de la ligne du caractère.

	 Il retourne le numéro de ligne du caractère actuel.
		\return Numéro de la ligne.
	*/
    inline unsigned int getLigne()   { return ligne;   } // accesseur
	
	/*! \fn inline unsigned int getColonne() { return colonne; }
		\brief Accesseur de la colonne du caractère.

	 Il retourne le numéro de colonne du caractère actuel.
		\return Numéro de la colonne.
	*/
    inline unsigned int getColonne() { return colonne; } // accesseur
	
	/*! \fn void suivant();
		\brief Fonction pour passer au caractère suivant.

	 Cette fonction lie le caractère suivant et le range dans carCour, si il existe.
	*/
    void suivant(); // passe au caractere suivant, s'il existe

  ////////////////////////////////////////////////////////////////////////////////
  private :
	/*! \var ifstream f
		\brief  Contient le fichier texte due l'on parcourt.
	*/
    ifstream f;           // le fichier texte que l'on parcourt

	/*! \var char carCour
		\brief  Contient le caractère actuellement lu par le lecteur.
	*/
    char carCour;         // le caractere courant
	
	/*! \var int ligne
		\brief  Contient le numéro de ligne du caractère courant.
	*/
    unsigned int ligne;   // numero de ligne du caractere courant
	
	/*! \var int colonne
		\brief  Contient le numéro de colonne du caractère courant.
	*/
    unsigned int colonne; // numero de colonne du caractere courant
	
};

#endif /* LECTEURCARACTERE_H_ */
